package com.easylinkin.linkappapi.tenantproject.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.easylinkin.linkappapi.shigongyun.vo.TenantProjectCountVo;
import com.easylinkin.linkappapi.tenantproject.dto.TenantProjectDto;
import com.easylinkin.linkappapi.tenantproject.entity.TenantProject;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * TenantProject表数据库访问层
 *
 * @author zhengwen
 * @date 2022/08/03
 */
public interface TenantProjectMapper extends BaseMapper<TenantProject> {


    /**
     * 查询分页
     *
     * @param page             分页参数对象
     * @param appTenantProject 过滤参数对象
     * @return 查询分页结果
     */
    IPage<TenantProject> selectPage(Page page, @Param("appTenantProject") TenantProject appTenantProject);

    /**
     * 查询单条
     *
     * @param id 主键id
     * @return 查询结果
     */
    TenantProject getOneById(@Param("id") Serializable id);

    /**
     * 根据优创级别统计数量
     *
     * @param tenantProjectCountVo 租户项目条件vo
     * @return 优创级别统计数量
     */
    List<Map<String, Object>> countNumGroupByClass(TenantProjectCountVo tenantProjectCountVo);

    /**
     * 统计数量根据类型分组
     *
     * @param tenantProjectCountVo 租户项目条件vo
     * @return 类型分组数量统计
     */
    List<Map<String, Object>> countNumGroupByType(TenantProjectCountVo tenantProjectCountVo);

    /**
     * 已完成产值求和
     *
     * @param tenantProjectCountVo 租户项目条件vo
     * @return 已完成产值求和
     */
    BigDecimal sumProjectOutput(TenantProjectCountVo tenantProjectCountVo);

    /**
     * 项目状态统计
     *
     * @param tenantProjectCountVo 租户项目条件vo
     * @return 项目状态数量统计
     */
    List<Map<String, Object>> countNumGroupByStatue(TenantProjectCountVo tenantProjectCountVo);

    /**
     * 查询租户项目扩展信息dto
     *
     * @param tenantProjectCountVo 租户项目条件vo
     * @return 租户项目扩展信息dto
     */
    TenantProjectDto selectOneTenantProjectDto(TenantProjectCountVo tenantProjectCountVo);

    /**
     * 根据条件查询所有租户项目dto
     *
     * @param tenantProject 租户项目
     * @return 租户项目dtoList
     */
    List<TenantProjectDto> selectTenantProjectDtoList(TenantProject tenantProject);

    /**
     * 根据条件统计数据按行政区分组
     *
     * @param tenantProjectCountVo 租户项目vo
     * @return 行政区项目数量
     */
    List<Map<String, Object>> countNumGroupByArea(TenantProjectCountVo tenantProjectCountVo);
}

